/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author Gislene
 */
import java.io.*;
import java.net.*;
import java.util.ArrayList;

public class Servidor {

    private ServerSocket serverSocket = null;
    private Socket novaConexao;
    private Fila<String> fila = new Fila<String>(20);
    private int qtde;
    private ArrayList <Jogador>  jogadores = new ArrayList<Jogador>();

    public Servidor(int qtde) {
        this.qtde = qtde;
    }

    public void Execute() throws IOException {

        serverSocket = new ServerSocket(2000);//ServerSocket(porta)

        //127.0.0.1

        WriteMens WM = new WriteMens(jogadores, fila);
        new Thread(WM).start();

        while (true) {

            System.out.println("aguardando nova conexão...");
            //fica parado até receber nova conexão
            try {
                novaConexao = serverSocket.accept(); //recebe nova conexão  

                System.out.println("Servidor Esperando mensagem");
                DataInputStream stream_entrada = new DataInputStream(novaConexao.getInputStream());
                String mens = stream_entrada.readUTF();
                String tx[] = mens.split("-");

                System.out.println(mens);
                //cliente está pedindo para ser incluído
                if (tx[0].equals("0"))//inclui
                {
                    if (jogadores.size() < qtde) {
                        if (tx[0].equals("0")) { //inclui jogador

                            Jogador j = new Jogador(tx[2], novaConexao);
                            j.setnome(tx[1]);
                            j.setcc(Integer.parseInt(tx[2]));
                            j.setpontos(Double.parseDouble(tx[3]));
                            

                            jogadores.add(j);

                            /* se é mensagem de que jogador foi incluido, 
                             * encaminha de novo mensagem de inclusao para todos
                             * para que os jogadores sejam incluidos na ordem 
                             * em que estão no servidor
                             */

                            for (int i = 0; i < jogadores.size(); i++) {
                                String texto = "0-" +
                                        jogadores.get(i).getnome() + "-" +
                                        jogadores.get(i).getcc() + "-" +
                                        jogadores.get(i).getpontos();
                                fila.insere(texto);

                                System.out.println("inclui jogador " + jogadores.get(i).getnome());
                            }

                            //avisa que comecou o jogo
                            if (jogadores.size() == qtde) {
                                String m = "2-" +                                        
                                        jogadores.get(0).getnome() + "-" +
                                        jogadores.get(0).getcc() + "-" +
                                        jogadores.get(0).getpontos();

                                fila.insere(m);

                                ReadMens RM = new ReadMens(jogadores, fila);
                                new Thread(RM).start();

                                break;

                            }
                        }
                    }
                }

            } catch (IOException e) {
                System.err.println(e.toString());//"Erro ao receber nova conexão");
                System.exit(0);
            } catch (InterruptedException e) {
            }
        }
    }
}
